package fr.adfm.ws.SP;

import fr.adfm.paiement.data.PaiementConfiguration;
import fr.adfm.paiement.data.ProcessContext;
import fr.adfm.proxy.SP.Devise;
import fr.adfm.proxy.SP.EtatTransaction;
import fr.adfm.proxy.SP.JetonRetour;
import fr.adfm.proxy.SP.WSPaiement;
import fr.adfm.proxy.SP.WSPaiementService;

public class WsPaiementSP {

	private ProcessContext context;
	private WSPaiement ws;
	
	public WsPaiementSP(ProcessContext context){
		this.context = context;
	}	
	
	public void ouvertureTransaction(Double somme) {
		try {
			openWs();
			PaiementConfiguration conf = new PaiementConfiguration();
			
			Devise devise = Devise.EURO;
			
			
			JetonRetour jr = ws.ouvertureTransaction(somme, devise, conf.getCompteEcommerce(), conf.getUrlSite(), conf.getTimeoutBanqueMinutes());
			
			context.getContextSP().noTransactionPaiement = jr.getUuidRequete();
			context.getContextSP().infoRedirectionSitePaiement = jr.getUrlRedirection();
		}
		catch(Exception ex) {
			context.setException(ex);
		}
	}

	public void pollingEtat() {
		try {
			openWs();			
			EtatTransaction state  = ws.pollingEtat(context.getContextSP().noTransactionPaiement);
			context.getContextSP().lastPollingState = state.toString();
		}
		catch(Exception ex) {
			context.setException(ex);
		}
	}
	
	private void openWs() {
		if(ws != null) return;
		
		WSPaiementService serv = new WSPaiementService();
		ws = serv.getWSPaiementPort();
	}
}
